#include <fcntl.h> // open
#include <unistd.h> // read write close
#include <sys/stat.h> // mkfifo()时要修改权限
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    printf("有名管道发送端准备发送数据...\n");
    fflush(stdout);
    // step 1# 定义有名管道 pipe 的路径，然后创建管道
    int fd;
    char *pipe_path = "myFifo";
    if (mkfifo(pipe_path, 0664) != 0) {
        perror("When mkfifo");
        exit(EXIT_FAILURE);
    }
    // step 2# 只写打开管道文件
    fd = open(pipe_path, O_WRONLY);
    if (fd == -1) {
        perror("When open");
        exit(EXIT_FAILURE);
    }
    // step 3# 定义写 buf 和 从标准输入读取到的字节数
    char write_buf[100];
    ssize_t read_num;
    while((read_num = read(STDIN_FILENO, write_buf, 100)) > 0) {
        // step 3.1# 如果从标准输入读取到字节数大于 0，则写进管道
        write(fd, write_buf, read_num);
    }
    printf("发送管道退出进程终止\n");
    fflush(stdout);
    close(fd);
    // step 4# 删除管道临时文件
    if(unlink(pipe_path)==-1){
        perror("fifo_write unlink");
    }
    return 0;
}